package work.mediway.mdm.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.HashMap;
import java.util.Map;

import work.mediway.mdm.core.enums.BusinessLogEnum;

/**
 * 数据变更日志
 *
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2022/7/2
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface BusinessLog {


    /**
     * 对象描述
     *
     * @return String
     */
    String title() default "";

    /**
     * 被修改的实体的唯一标识，例如：菜单实体的唯一标识为”id"
     *
     * @return String
     */
    String key() default "id";

    /**
     * 如果没有配置title时,需要在describeField中查询数据拼接title
     *
     * @return String
     */
    String describeField() default "name";

    /**
     * 业务类型，新增、修改、删除,数据绑定等
     *
     * @return BusinessLogEnum
     */
    BusinessLogEnum type() default BusinessLogEnum.INSERT;


    /**
     * 业务实体类
     *
     * @return Class
     */
    Class entityClass() default String.class;

    /**
     * 当前实体需要排除的保存字段
     *
     * @return String
     */
    String ignoreFields() default "";

    /**
     * 是否存在父子关系
     *
     * @return boolean
     */
    boolean isSkirt() default false;

    /**
     * spel 表达式{key:#id,value:#value}
     *
     * @return String
     */
    String expression() default "";

    /**
     *
     */
    Map<String, String> map = new HashMap<>();

}
